package leetcode.t4LinkedList;

/**
 * @author K
 * @date 2024/1/23 13:41
 */
public class T2_AddTwoNumbers {

    /**
     * 2. 两数相加
     *
     * @param l1
     * @param l2
     * @return
     */
    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(-1);
        ListNode result = dummy;
        int carry = 0;

        while (l1 != null || l2 != null) {
            int sum = 0;
            sum += carry;
            if (l1 != null) {
                sum += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                sum += l2.val;
                l2 = l2.next;
            }

            if (sum / 10 > 0) {
                dummy.next = new ListNode(sum % 10);
                carry = 1;
            } else {
                dummy.next = new ListNode(sum);
                carry = 0;
            }
            dummy = dummy.next;
        }

        if (carry == 1) {
            dummy.next = new ListNode(1);
        }

        return result.next;
    }

    public static void main(String[] args) {
        ListNode listNode = new ListNode(2);
        ListNode listNode1 = new ListNode(4);
        ListNode listNode2 = new ListNode(3);
        listNode.next = listNode1;
        listNode1.next = listNode2;

        ListNode listNodeB = new ListNode(5);
        ListNode listNodeB1 = new ListNode(6);
        ListNode listNodeB2 = new ListNode(4);
        listNodeB.next = listNodeB1;
        listNodeB1.next = listNodeB2;

        ListNode listNodec = new ListNode(9);
        ListNode listNodec1 = new ListNode(9);
        ListNode listNodec2 = new ListNode(9);
        ListNode listNodec3 = new ListNode(9);
        ListNode listNodec4 = new ListNode(9);
        ListNode listNodec5 = new ListNode(9);
        ListNode listNodec6 = new ListNode(9);
        listNodec.next = listNodec1;
        listNodec1.next = listNodec2;
        listNodec2.next = listNodec3;
        listNodec3.next = listNodec4;
        listNodec4.next = listNodec5;
        listNodec5.next = listNodec6;

        ListNode listNoded = new ListNode(9);
        ListNode listNoded1 = new ListNode(9);
        ListNode listNoded2 = new ListNode(9);
        ListNode listNoded3 = new ListNode(9);
        listNoded.next = listNoded1;
        listNoded1.next = listNoded2;
        listNoded2.next = listNoded3;

        ListNode result = addTwoNumbers(listNode, listNodeB);
        ListNode result2 = addTwoNumbers(listNodec, listNoded);

        System.out.println();
    }

}
